<?php
	/*
	 *处理分类
	 *@param array $data 由数据库中查询出来的结果
	 *@param int $pid 父id
	 *@param int $count 表示每个分类的层级
	 *@return $rec 处理完成的数组
	 */
	function getTree($data, $pid, $count = 0)
	{
		//声明静态变量
		static  $rec = array(); 
		//遍历数据依次取到数组中的，每一条记录
		foreach ($data as $val) {
			//判断当前数组中的数据的pid是否等于传递进来的 $pid = 0;
			if ($val['pid'] == $pid) {
				//直接将作为级别的标示，存到$val 。因为$val本身就是一条分类的记录
				$val['count'] = $count;
				$rec[] = $val;
				getTree($data, $val['id'],$count + 1);
			}	
		}
		return $rec;
	}

	/*
	 *得到某个分类的下所有子类
	 *@param array $data 由数据库中查询出来的结果
	 *@param int $pid 父id
	 *@param int $count 表示每个分类的层级
	 *@return $rec 处理完成的数组
	 */
	function getChild($data, $pid)
	{
		//声明静态变量
		static  $rec = array(); 
		//遍历数据依次取到数组中的，每一条记录
		foreach ($data as $val) {
			//判断当前数组中的数据的pid是否等于传递进来的 $pid = 0;
			if ($val['pid'] == $pid) {
				$rec[] = $val['id'];
				getChild($data, $val['id']);
			}	
		}
		return $rec;
	}

	/**
	 *得到面包屑的函数
	 *@param array $data 分类的信息
	 *@pram int $pid 某件商品的分类id
	 *@return array $rec 处理之后的数据，某个商品的所有父类
	 */
	function getFather($data, $pid)
	{
		static $rec = array();
		//遍历所有的分类信息
		foreach ($data as $val) {
			//判断当前传递的过来的$pid,是否某个分类的id，当前分类是否还有父类
			if ($val['id'] == $pid) {
				$rec[] = $val;
				getFather($data, $val['pid']);
			}
		}
		krsort($rec);
		return $rec;
	}

	/**
	 *@param array $file 表单提交过来的文件信息
	 *@param string $path 上传的保存路径
	 *@param array $alloType 允许的类型
	 *@param int $size 允许的大小
	 *@return array $rec 返回的信息
	 */
	function uploaded($file, $path, $alloType = array('image/jpeg', 'image/png'), $size = 0)
	{
		$rec = array('info' => '', 'error' => 'false');
		if ($file['error'] > 0) {
			switch ($file['error']) {
				case 1: $info = '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值.';break;
				case 2: $info = '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。';break;
				case 3: $info = '文件只有部分被上传。';break;
				case 4: $info = '没有文件被上传。';break;
				case 6: $info = '找不到临时文件夹。';break;
				case 7: $info = '文件写入失败.';break;
				default: $info = '未知错误';
			}
			$rec['info'] = $info;
			return $rec;
		}

		if (!in_array($file['type'], $alloType)) {
			$rec['info'] = '文件类型不被允许';
			return $rec; 
		}
		
		if ($size > 0 && $file['size'] > $size) {
			$rec['info'] = '文件过大';
			return $rec; 
		}
		
		$timeDir = date('Ymd',time());
		$savePath = rtrim($path, '/').'/'.$timeDir;

		if (!file_exists($savePath)) {
			mkdir($savePath, 0777, true);
		}
		$ext = pathinfo($file['name'], PATHINFO_EXTENSION);
		$fileName = date('YmdHis',time()).mt_rand(1000, 9999).'.'.$ext;
		
		$saveName = rtrim($savePath, '/').'/'.$fileName;

		if (is_uploaded_file($file['tmp_name'])) {
			if (move_uploaded_file($file['tmp_name'], $saveName)) {
				$rec['info'] = rtrim($timeDir,'/').'/'.$fileName;
				$rec['error'] = true;
				return $rec; 
			} else {
				$rec['info'] = '上传失败';
				return $rec; 
			}
		} else {
			$rec['info'] = '上传方式不合法';
			return $rec; 
		}
	}

		/*
	 *缩放函数
	 *@param string $path 图片的路径
	 *@param int $width 缩放的宽度
	 *@param int $height 缩放的高度
	 *@param string $savePath 保存文件的路径
	 */
	function thumb ($path, $width, $height, $savePath = './')
	{
		//获取图片的信息
		$info = getimagesize($path);
	
		//将图片的大小放大变量中
		list($srcWidth, $srcHeight) =  $info;
		//计算出缩放的比例
		$scala = min($width / $srcWidth, $height / $srcHeight);
		
		//判断哪个边大
		if ($srcWidth > $srcHeight) {
			$dstHeight = $srcHeight * $scala;
			$dstWidth = $width;
		} else {
			$dstHeight = $height;
			$dstWidth = $srcWidth * $scala;
		}

		//die();
		//获取文件类型
		$extStr = $info['mime'];
		//截取出文件的后缀名
		$ext = substr($extStr, strrpos($extStr, '/') + 1);
		
		//生成打开文件的函数
		$open = 'imagecreatefrom'.$ext;
		
		//生成保存新文件的函数
		$save = 'image'.$ext;
		//echo $save;
		//die();
		//根据传递的路径，获取文件的信息
		$file = pathinfo($path);
		//得到文件名
		$fileName = $file['filename'];
		//生成一个新的文件名
		$newName = $width.'_'.$fileName.$ext;

		//生成缩放图的保存路径
		$savePath = trim($savePath, '/').'/'.$newName;
		//echo $savePath;
		//die();
		//echo $newName;
		//die();
		

		//用户打开指定的文件
		$img = $open($path);

		//创建新图的资源
		$newImg = imagecreatetruecolor($dstWidth, $dstHeight);

		//执行缩放
		imagecopyresampled($newImg, $img, 0, 0, 0, 0, $dstWidth, $dstHeight, $srcWidth, $srcHeight);

		//保存缩放的图片
		$save($newImg, $savePath);
		//销毁图片资源
		imagedestroy($newImg);
		imagedestroy($img);
		return $savePath;
	}
?>